<?php

namespace app\controller;

use app\BaseController;
use app\model\AutoTask;
use app\model\ClueCommunicateRecord;
use app\model\CluePerson;
use app\model\WorkPlan;
use app\Request;
use app\service\RedisService;
use GatewayClient\Gateway;
use think\facade\Db;

class Timer extends BaseController
{
    /**
     * 定时器处理控制器
     */

    public function index(
        AutoTask                  $autoTask,
        CluePerson                $person,
        \app\model\ClueEnterprise $enterprise,
        ClueCommunicateRecord $clueCommunicateRecord,
        RedisService $redisService
    ){
        /**
         * 跟进计划任务提醒
         */
//        $planData = $workPlanModel->getIsTxDataModel();
//
//        foreach ($planData as $k => $planDatum) {
//
//            if (strtotime ($planDatum['plan_date'])< time ()){
//                //修改为已提醒
//                $workPlanModel->setTxFindModel($planDatum['id']);
//                if ($planDatum['type'] == 1){
//
//                    //添加到message库
//                    $messages = $message->addPlanModel($planDatum['custom_name'],$planDatum['create_uid']['id'],$planDatum['id'],date('Y-m-d H:i:s'));
//
//                    //发送消息
//                    $gateway->sendToUid($planDatum['create_uid']['id'],json_encode ($messages));
//
//                }else if($planDatum['type'] == 2){
//                    //添加到message库
//                    $messages = $message->addInformationModel($planDatum['plan_content'],$planDatum['create_uid']['id'],date('Y-m-d H:i:s'));
//                    //发送消息
//                    $gateway->sendToUid($planDatum['create_uid']['id'],json_encode ($messages));
//                }
//            }
//        }


        /**
         * 执行自动调回回收条件
         */
        $autoData = $autoTask->where (['is_k'=>1])->whereTime ('execute_date','<',date('Y-m-d H:i:s'))->select()->toArray ();

        foreach ($autoData as $autoDatum) {

            if ($autoDatum['clue_type'] == 1){ //人才

                //重点客户设置时间 zd_date  创建时间 create_date  分配时间 allocation_date   #### 最新沟通时间 create_date as new_date  下次沟通时间 next_communicate_date
                $personData = $person->getPersonDataModel();

                //判断是否是区间查询
                if (!empty($autoDatum['field2'])){

                    foreach ($personData as $personDatum) {

                        //判断是否有该字段
                        if (!isset($personDatum[$autoDatum['field']]) || !isset($personDatum[$autoDatum['field2']])){
                            continue;
                        }


                        //查询绑定最新一条沟通记录与下次沟通时间
                        $res = $clueCommunicateRecord->getPersonIpToDateComRecordModel($personDatum['id']);
                        if (!$res){
                            continue;
                        }
                        //绑定到用户数据
                        $personDatum['next_communicate_date'] = $res['next_communicate_date'];
                        $personDatum['new_date'] = $res['create_date'];

                        if (!empty($personData['next_communicate_date']) && !empty($personDatum['new_date'])){
                            if (abs($personDatum[$autoDatum['field']]-$personDatum[$autoDatum['field2']]) > ($autoDatum['value']*86400)){

                                if ($autoDatum['task_type'] == 1){ //调回
                                    $person->autoWhereDhExe(['id'=>$personDatum['id']]);
                                    $redisService->delPersonData ($personDatum['id']);
                                }else{ //回收
                                    $person->autoWhereHsExe(['id'=>$personDatum['id']]);
                                    $redisService->delPersonData ($personDatum['id']);

                                }
                            }
                        }

                    }
                }else{

                    foreach ($personData as $personDatum) {

                        if (!isset($personDatum[$autoDatum['field']])){
                            continue;
                        }

                        switch($autoDatum['where'])
                        {
                            case "=":
                                if (is_array ($personDatum[$autoDatum['field']])){

                                    if ($personDatum[$autoDatum['field']]['id'] == $autoDatum['value']){

                                        if ($autoDatum['task_type'] == 1){ //调回

                                            $person->autoWhereDhExe(['id'=>$personDatum['id']]);
                                            $redisService->delPersonData ($personDatum['id']);

                                        }else{ //回收
                                            $person->autoWhereHsExe(['id'=>$personDatum['id']]);
                                            $redisService->delPersonData ($personDatum['id']);

                                        }
                                    }
                                }else{
                                    if ($personDatum[$autoDatum['field']] == $autoDatum['value']){

                                        if ($autoDatum['task_type'] == 1){ //调回

                                            $person->autoWhereDhExe(['id'=>$personDatum['id']]);
                                            $redisService->delPersonData ($personDatum['id']);

                                        }else{ //回收
                                            $person->autoWhereHsExe(['id'=>$personDatum['id']]);
                                            $redisService->delPersonData ($personDatum['id']);

                                        }
                                    }
                                }

                                break;
                            case ">":
                                if ($personDatum[$autoDatum['field']] > $autoDatum['value']){
                                    echo 1;
                                    if ($autoDatum['task_type'] == 1){ //调回
                                        $person->autoWhereDhExe(['id'=>$personDatum['id']]);
                                        $redisService->delPersonData ($personDatum['id']);

                                    }else{ //回收
                                        $person->autoWhereHsExe(['id'=>$personDatum['id']]);
                                        $redisService->delPersonData ($personDatum['id']);

                                    }
                                }
                                break;
                            case "<":
                                if ($personDatum[$autoDatum['field']] < $autoDatum['value']){
                                    echo 1;
                                    if ($autoDatum['task_type'] == 1){ //调回
                                        $person->autoWhereDhExe(['id'=>$personDatum['id']]);
                                        $redisService->delPersonData ($personDatum['id']);

                                    }else{ //回收
                                        $person->autoWhereHsExe(['id'=>$personDatum['id']]);
                                        $redisService->delPersonData ($personDatum['id']);

                                    }
                                }
                                break;
                        }

                    }
                }
            }else{//企业

                //重点客户设置时间 zd_date  创建时间 create_date  分配时间 allocation_date   #### 最新沟通时间 create_date  下次沟通时间 next_communicate_date
                $enterData = $enterprise->getPersonDataModel();

                //判断是否是区间查询
                if (!empty($autoDatum['field2'])){

                    foreach ($enterData as $enterDatum) {

                        //判断是否有该字段
                        if (!isset($enterDatum[$autoDatum['field']]) || !isset($enterData[$autoDatum['field2']])) {
                            continue;
                        }

                        //查询绑定最新一条沟通记录与下次沟通时间
                        $res = $clueCommunicateRecord->getPersonIpToDateComRecordModel($enterDatum['id'],2);
                        if (!$res){
                            continue;
                        }
                        //绑定到用户数据
                        $enterDatum['next_communicate_date'] = $res['next_communicate_date'];
                        $enterDatum['new_date'] = $res['create_date'];
                        if (!empty($enterDatum['next_communicate_date']) && !empty($enterDatum['new_date'])){
                            if (abs($enterDatum[$autoDatum['field']]-$enterDatum[$autoDatum['field2']]) > ($autoDatum['value']*86400)){
                                if ($autoDatum['task_type'] == 1){ //调回

                                    $enterprise->autoWhereDhExe(['id'=>$enterDatum['id']]);
                                    $redisService->delEnterData ($enterDatum['id']);

                                }else{ //回收
                                    $enterprise->autoWhereHsExe(['id'=>$enterDatum['id']]);
                                    $redisService->delEnterData ($enterDatum['id']);

                                }
                            }
                        }
                    }
                }else{

                    foreach ($enterData as $enterDatum) {
                        //判断是否有该字段
                        if (!isset($enterDatum[$autoDatum['field']])){
                            continue;
                        }

                        switch($autoDatum['where'])
                        {
                            case "=":

                                if ($enterDatum[$autoDatum['field']] == $autoDatum['value']){
                                    if ($autoDatum['task_type'] == 1){ //调回
                                        $enterprise->autoWhereDhExe(['id'=>$enterDatum['id']]);
                                        $redisService->delEnterData ($enterDatum['id']);
                                    }else{ //回收
                                        $enterprise->autoWhereHsExe(['id'=>$enterDatum['id']]);
                                        $redisService->delEnterData ($enterDatum['id']);
                                    }
                                }
                                break;
                            case ">":
                                if ($enterDatum[$autoDatum['field']] > $autoDatum['value']){
                                    if ($autoDatum['task_type'] == 1){ //调回
                                        $enterprise->autoWhereDhExe(['id'=>$enterDatum['id']]);
                                        $redisService->delEnterData ($enterDatum['id']);
                                    }else{ //回收
                                        $enterprise->autoWhereHsExe(['id'=>$enterDatum['id']]);
                                        $redisService->delEnterData ($enterDatum['id']);
                                    }
                                }
                                break;
                            case "<":
                                if ($enterDatum[$autoDatum['field']] < $autoDatum['value']){
                                    if ($autoDatum['task_type'] == 1){ //调回
                                        $enterprise->autoWhereDhExe(['id'=>$enterDatum['id']]);
                                        $redisService->delEnterData ($enterDatum['id']);
                                    }else{ //回收
                                        $enterprise->autoWhereHsExe(['id'=>$enterDatum['id']]);
                                        $redisService->delEnterData ($enterDatum['id']);
                                    }
                                }
                                break;
                        }
                    }
                }
            }

        }
    }

    public function plan(
        Gateway                   $gateway,
        \app\model\UserMessage    $message,
        RedisService $redisService
    ){
        /**
         * 查询有没有待提醒的信息
         */
        $data = $message->getWaitSendInfoModel();


        if (!empty($data)){
            foreach ($data as $datum) {
                //根据btype修改订单定时器缓存
                if ($datum['b_type'] == 0){ //证书审核
                    if (preg_match('/[a-zA-Z]/', $datum['b_id'])) {
                        $redisService->updateOrderZsshData ($datum['order_company_id']);
                    }
                }
                //uid 转数组批量通知
                if (is_array ($datum['uid'])){
                    $uidArr = explode (',',$datum['uid']['id']);
                }else{
                    $uidArr = $datum['uid'];
                }

                if (strtotime ($datum['execution_date']) <= time()){
                    //发送消息
                    foreach ($uidArr as $item) {
                        $gateway->sendToUid($item,json_encode ($datum));
                    }
                    //修改消息为已发送
                    $message->editInfoSendModel($datum['id']);
                }
            }
        }
    }


    /**
     * 临时处理
     */

    public function tals(CluePerson $personModel)
    {
//        $data = $personModel->whereBetween('allocation_date','2024-01-02 08:50:03','2024-01-02 11:59:03')->select();
//        print_r ($data);die;
    }
}